'''
Created on 02/04/2012

@author: nicolas
'''

import pylab as p


MUESTRAS = 50
CANT_TERMINOS = 50


#funcion de periodo 12
def Xb(n):
    return p.sin(2 * p.pi * n / 3) * p.cos(p.pi * n / 2)

def a_k(k, N, X):
    resultado = 0
    for n in range(N):
        resultado += X(n) * p.exp(-1j * k * (2 * p.pi / N) * n)
    return resultado / N

coeficientes = []
coeficientes_m = []
coeficientes_f = []

for k in range(CANT_TERMINOS):
    valor = a_k(k, 12, Xb)
    coeficientes.append(valor)
    coeficientes_m.append(p.absolute(valor))
    coeficientes_f.append(p.angle(valor))

p.figure(1)
p.subplot(211)
p.title('Modulo')
p.plot(coeficientes_m)
p.plot(coeficientes_m, 'o')

p.subplot(212)
p.title('Fase')
p.plot(coeficientes_f)
p.plot(coeficientes_f, 'o')

p.savefig('punto_3_mod_ang.png')


def reconstruir(n, N, coeficientes):
    resultado = 0
    for k in range(N):
        resultado += coeficientes[k]* p.exp(1j * k * (2 * p.pi / N) * n)
    return resultado

reconstruccion = []
original = []
for n in range(MUESTRAS):
    reconstruccion.append(reconstruir(n, 12, coeficientes))
    original.append(Xb(n))


p.figure(2)
p.subplot(211)
p.title('Original')
p.plot(original)
p.plot(original, 'o')

p.subplot(212)
p.title('Reconstruida')
p.plot(reconstruccion)
p.plot(reconstruccion, 'o')

p.savefig('punto_3_reconstruccion.png')

p.show()
